Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - [assembler] lettura da floppy tramite INT 0x13 da BIOS
Forum - Altri Linguaggi - [assembler] lettura da floppy tramite INT 0x13 da BIOS

Avatar
Exor (Normal User)
Rookie


Messaggi: 30
Iscritto: 29/08/2009

Segnala al moderatore
Postato alle 23:17
Giovedì, 25/02/2010
salve

sto cercando di capire come mai non funziona la lettura da floppy.

Ho fatto un bootloader, e voglio cercare di leggere il bootloader per creare un loop.

siccome il bootloader si trova nel primo settore, io cerco di leggere così

Codice sorgente - presumibilmente Altri Linguaggi

  1. mov ax, 0x7c00
  2.         mov es, ax
  3.         mov ch, 0            ; track
  4.         mov cl, 0          ; sector
  5.         mov dh, 0            ; head
  6.         mov dl, 0            ; drive
  7.         mov ah, 0x02
  8.         mov al, 0x1             ;settori da leggere
  9.         mov bx, 0x200
  10.         int 0x13



dopo questo codice faccio un jc per saltare alla parte della lettura riuscita

Codice sorgente - presumibilmente Altri Linguaggi

  1. jc ReadSectors.Error
  2.        
  3.         jmp ReadSectors.Done
  4.  
  5. ReadSectors.Error:
  6.         mov si, loadsectors.rootdirerr
  7.         call PrintStr
  8.         ret
  9. ReadSectors.Done:
  10.         mov si, loadsectors.rootdirsuccess
  11.         call PrintStr
  12.         jmp 0x200
  13.         ret



il messaggio di riuscita della lettura appare, però quando dovrebbe saltare all'indirizzo 0x200, non succede niente... ho provato anche a sostituire 0x200 nel jmp con 0x7c00:0x200 tanto per essere sicuro che non fosse un problema d'indirizzo, ma non funziona lo stesso.

potreste aiutarmi a capire cosa non va ?

grazie mille :)

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:37
Venerdì, 26/02/2010
Come stai provando il programma (macchina fisica? Virtuale?)



Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Exor (Normal User)
Rookie


Messaggi: 30
Iscritto: 29/08/2009

Segnala al moderatore
Postato alle 14:31
Venerdì, 26/02/2010
virtuale :S

infatti ho pensato pure io che possano essere diversi gli interrupt, però almeno il carry flag si dovrebbe settare no ?

siccome non si setta ho pensato che avesse letto...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:02
Venerdì, 26/02/2010
No ... non c'è differenza ... ma il codice che sta a partire dall'indirizzo 7c00:0200 qual è ?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Exor (Normal User)
Rookie


Messaggi: 30
Iscritto: 29/08/2009

Segnala al moderatore
Postato alle 15:16
Venerdì, 26/02/2010
allora a 7c00:0000 c'è il bootloader che carica il bios, 512 byte dopo (0x0200) volevo caricare il settore dal floppy
e qui c'è il problema ...

dice che la lettura è avvenuta perkè non si setta il carry flag, però quando faccio jmp 7c00:200 non fa niente ...

dovrebbe ricaricare di nuovo il bootloader ma non lo fa

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:19
Venerdì, 26/02/2010
Ripeto la domanda ... quale codice c'e' a partire da 7c00:0200 ? Come ti accorgi che il jmp non ha avuto effetto?


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Exor (Normal User)
Rookie


Messaggi: 30
Iscritto: 29/08/2009

Segnala al moderatore
Postato alle 15:25
Venerdì, 26/02/2010
O_O FUNZIONAAAAAAAA :)

era l'indirizzo dove caricavo i dati ... invece di 0x200 ho provato 0x700 ed è andata :)

però è strano dovrei avere a disposizione tutta la memoria tranne l'ultimo segmento e quello del bootloader :-|

EDIT:

è andata anche con 0x200 ... -.-

ho solo cambiato l'indirizzo del jmp .. invece di saltare a 0x200 era 0x200:0x0

dovevo specificare anche l'offset (infatti essendo in real mode -.-)

grazie per l'aiuto, grande forum :k:

Ultima modifica effettuata da Exor il 26/02/2010 alle 15:30
PM Quote